/*
 * This header was generated from the Linux kernel headers by update_headers.py,
 * to provide necessary information from kernel to userspace, such as constants,
 * structures, and macros, and thus, contains no copyrightable information.
 */
#ifndef _LINUX_VIRTIO_BLK_H
#define _LINUX_VIRTIO_BLK_H
#include <linux/types.h>
#include <linux/virtio_ids.h>
#include <linux/virtio_config.h>
#include <linux/virtio_types.h>
#define VIRTIO_BLK_F_SIZE_MAX	1
#define VIRTIO_BLK_F_SEG_MAX	2
#define VIRTIO_BLK_F_GEOMETRY	4
#define VIRTIO_BLK_F_RO		5
#define VIRTIO_BLK_F_BLK_SIZE	6
#define VIRTIO_BLK_F_TOPOLOGY	10
#define VIRTIO_BLK_F_MQ		12
#ifndef VIRTIO_BLK_NO_LEGACY
#define VIRTIO_BLK_F_BARRIER	0
#define VIRTIO_BLK_F_SCSI	7
#define VIRTIO_BLK_F_FLUSH	9
#define VIRTIO_BLK_F_CONFIG_WCE	11
#ifndef __KERNEL__
#define VIRTIO_BLK_F_WCE VIRTIO_BLK_F_FLUSH
#endif
#endif
#define VIRTIO_BLK_ID_BYTES	20
struct virtio_blk_config {

	__u64 capacity;

	__u32 size_max;

	__u32 seg_max;

	struct virtio_blk_geometry {
		__u16 cylinders;
		__u8 heads;
		__u8 sectors;
	} geometry;

	__u32 blk_size;


	__u8 physical_block_exp;

	__u8 alignment_offset;

	__u16 min_io_size;

	__u32 opt_io_size;

	__u8 wce;
	__u8 unused;

	__u16 num_queues;
} __attribute__((packed));
#define VIRTIO_BLK_T_IN		0
#define VIRTIO_BLK_T_OUT	1
#ifndef VIRTIO_BLK_NO_LEGACY
#define VIRTIO_BLK_T_SCSI_CMD	2
#endif
#define VIRTIO_BLK_T_FLUSH	4
#define VIRTIO_BLK_T_GET_ID    8
#ifndef VIRTIO_BLK_NO_LEGACY
#define VIRTIO_BLK_T_BARRIER	0x80000000
#endif
struct virtio_blk_outhdr {

	__virtio32 type;

	__virtio32 ioprio;

	__virtio64 sector;
};
#ifndef VIRTIO_BLK_NO_LEGACY
struct virtio_scsi_inhdr {
	__virtio32 errors;
	__virtio32 data_len;
	__virtio32 sense_len;
	__virtio32 residual;
};
#endif
#define VIRTIO_BLK_S_OK		0
#define VIRTIO_BLK_S_IOERR	1
#define VIRTIO_BLK_S_UNSUPP	2
#endif
